//
//  KZBaseVC.h
//  lg_zhinengbeikao_english
//
//  Created by 朱凯 on 2018/12/10.
//  Copyright © 2018年 zhukai. All rights reserved.
//

#import <UIKit/UIKit.h>

// 自定义push转场动画
#import "KZBottomPopAnimator.h"
#import "KZNormalPushAnimator.h"
#import "KZSideslipAnimator.h"
#import "UIViewController+transition.h"
#import "KZTransitionAnimator.h"
#import "KZTransitionAnimatedConfig.h"
#import "KZTransitionInteractiveConfig.h"

typedef enum : NSUInteger {
    KZNavigationItemModeImage         = 1 << 0,  // 图片
    KZNavigationItemModeText          = 1 << 1,  // 文字
    KZNavigationItemModeImageAndText  = 1 << 2,  // 图文（图片在上，文字在下），图文字符串需要统一
} KZNavigationItemMode;

typedef enum : NSUInteger {
    KZNavigationItemPositionModeLeft  = 1 << 10, // 左侧
    KZNavigationItemPositionModeRight = 1 << 11, // 右侧
} KZNavigationItemPositionMode;

@interface KZBaseVC : UIViewController

/**
 tableview
 */
@property (nonatomic, strong) UITableView *tableView;

#pragma mark - 转场动画
/**
 基本转场动画
 */
@property (nonatomic, strong) KZNormalPushAnimator *normalPushAnimator;
/**
 侧滑转场动画
 */
@property (nonatomic, strong) KZSideslipAnimator *sideslipAnimator;
/**
 仿淘宝详情规格选择动画
 */
@property (nonatomic, strong) KZBottomPopAnimator *bottomPopAnimator;
/**
 侧滑和底部弹出视图返回回调设置，不设置则不能点击阴影返回
 */
@property (nonatomic, copy) void(^backCongfig)(void);


/**
 导航栏上控件的颜色
 */
@property (nonatomic, strong) UIColor *tintColor;
/**
 快捷设置导航栏属性，在viewWillAppear 方法中调用该方法并设置需要的状态

 @param translucent true：半透明 false：非半透明
 @param light true：白色 false：黑色
 */
- (void)setNaviAttributeWithTranslucent:(BOOL)translucent
                   stateBarLightContent:(BOOL)light;
/**
 创建导航栏返回按钮
 */
- (void)addLeftBackBarButtonItem;

/**
 创建导航栏item

 @param items 文字或图片的名字
 @param mode 3个种类选择一种
 @param position 位置
 */
- (void)addNaviItems:(NSArray *)items
                mode:(KZNavigationItemMode)mode
            position:(KZNavigationItemPositionMode)position;

/**
 用自定义视图创建导航栏item

 @param views 自定义视图数组
 @param position 位置
 */
- (void)addNaviItemWithCustomViews:(NSArray *)views
                          position:(KZNavigationItemPositionMode)position;


/**
 导航栏控件被点击时的回调，需要子类覆写
 */
- (void)onNaviItemClick:(KZNavigationItemPositionMode)position index:(NSInteger)index;

/**
 push到一个vc，带导航栏

 @param vc target vc
 */
- (void)push:(UIViewController *)vc;
/**
 pop到上一层
 */
- (void)pop;
/**
 pop到某一个vc
 对于导航控制器有多个同类子vc时，可以控制跳转到最近的那个或最远的那个

 @param vcCls vc的类
 @param isNearest 最否是最近的那个，否则取最远
 */
- (void)popTo:(Class)vcCls isNearest:(BOOL)isNearest;
/**
 pop到根vc
 */
- (void)popToRoot;


/**
 modal push
 默认不含返回手势，需要手势则在需要的vc调用添加手势方法
 */
- (void)present:(UIViewController *)vc;
/**
 modal push

 @param vc 目标vc
 @param withBackInteractive 是否含返回手势
 */
- (void)present:(UIViewController *)vc withBackInteractive:(BOOL)withBackInteractive;
/**
 返回到上一个modal视图
 */
- (void)dismiss;



@end
